{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from IPython.core.interactiveshell import InteractiveShell\n",
    "InteractiveShell.ast_node_interactivity = 'all'\n",
    "import sys\n",
    "sys.path.append('../')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "\n",
    "from data.readData import TrainDataReader\n",
    "from environment.electric_scheduling import PowerDayAheadSchedule\n",
    "from environment.storage import Storage\n",
    "import utils.show_policy as tool\n",
    "# from model.DDPG.v1.trainer import Trainer\n",
    "from model.SAC.v2.sac_trainer import sac_trainer as Trainer\n",
    "\n",
    "trainData = TrainDataReader()\n",
    "days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n",
    "MODEL_PATH = \"./result/sac_model.pth\"\n",
    "fireStationNum = 10\n",
    "trainDuration = 24 * 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "==============Day1 Hour0=================\n",
      "fire output= [220.46512, 349.94867, 0, 215.52663, 0, 353.43338, 338.59433, 0, 306.27817, 319.19568]\n",
      "water output= [852.1339, 607.5402, 575.9012, 491.6514, 886.2581, 710.4156, 0, 268.02792, 0, 383.57388, 0, 15.097909, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149.59862, 0, 0, 0, 111.488464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62.48062, 0, 0, 0, 0, 0, 0, 0, 33.13635, 0, 0, 0]\n",
      "solar output= 0\n",
      "wind output= 2646.36\n",
      "==============Day1 Hour1=================\n",
      "fire output= [233.79979, 347.8594, 0, 227.6941, 0, 388.26822, 367.4714, 0, 293.4761, 307.14194]\n",
      "water output= [881.92786, 629.9401, 624.24347, 503.5723, 896.49176, 676.179, 0, 234.21693, 0, 359.18152, 0, 14.408859, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96.2817, 0, 0, 0, 141.20793, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35.61579, 0, 44.495476, 0]\n",
      "solar output= 0\n",
      "wind output= 2437.29\n",
      "==============Day1 Hour2=================\n",
      "fire output= [239.8184, 345.44067, 0, 230.6501, 0, 406.48254, 382.76065, 0, 283.2525, 301.62354]\n",
      "water output= [897.2498, 639.43134, 653.50323, 505.87354, 896.7914, 660.75903, 0, 214.64055, 0, 342.66782, 0, 14.19388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63.497948, 0, 0, 0, 149.62964, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33.49862, 0, 78.47405, 0]\n",
      "solar output= 0\n",
      "wind output= 2311.39\n",
      "==============Day1 Hour3=================\n",
      "fire output= [212.46667, 333.5638, 0, 201.65692, 0, 458.59988, 452.36523, 110.14453, 263.32654, 297.36786]\n",
      "water output= [991.2987, 637.6298, 770.3927, 684.38513, 894.07355, 703.0127, 0, 149.48735, 0, 144.57571, 0, 13.814131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252.55304, 0, 33.832954, 0, 0, 0, 0, 174.87294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98.153885, 183.73404, 0]\n",
      "solar output= 0\n",
      "wind output= 1972.08\n",
      "==============Day1 Hour4=================\n",
      "fire output= [208.49783, 306.7648, 0, 200.56215, 0, 482.2759, 461.1981, 164.98462, 302.30075, 281.24677]\n",
      "water output= [1006.3791, 654.6962, 765.1906, 763.4296, 883.23157, 735.0292, 0, 123.2547, 0, 90.9427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309.19254, 0, 88.58521, 0, 0, 0, 0, 190.69559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78.09055, 196.21727, 0]\n",
      "solar output= 0\n",
      "wind output= 1827.52\n",
      "==============Day1 Hour5=================\n",
      "fire output= [218.25285, 259.67285, 0, 212.11243, 0, 491.06686, 470.71875, 197.97835, 316.3136, 279.49408]\n",
      "water output= [997.641, 683.06793, 776.09827, 831.98584, 871.83075, 756.073, 0, 105.25591, 0, 87.75619, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333.11404, 0, 126.56619, 0, 0, 0, 0, 187.8576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30.535738, 204.41063, 0]\n",
      "solar output= 0\n",
      "wind output= 1710.87\n",
      "==============Day1 Hour6=================\n",
      "fire output= [261.1262, 211.4445, 0, 263.14294, 0, 481.6068, 507.98672, 215.83408, 326.9809, 290.59805]\n",
      "water output= [982.96246, 745.24054, 800.4574, 914.3595, 857.2793, 806.835, 0, 76.18556, 0, 99.685196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 389.1218, 0, 172.2724, 0, 0, 0, 0, 180.9975, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217.2776, 0]\n",
      "solar output= 0\n",
      "wind output= 1580.48\n",
      "==============Day1 Hour7=================\n",
      "fire output= [281.173, 200.3927, 0, 290.6375, 0, 481.6469, 514.4928, 205.3451, 322.911, 303.44238]\n",
      "water output= [975.845, 767.1931, 811.93933, 939.88745, 854.44147, 836.4883, 0, 86.443756, 0, 105.802956, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384.8488, 0, 184.09392, 0, 0, 0, 0, 178.56737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208.56836, 0]\n",
      "solar output= 0\n",
      "wind output= 1545.67\n",
      "==============Day1 Hour8=================\n",
      "fire output= [358.45224, 167.46252, 0, 389.2304, 0, 450.3926, 455.63483, 208.68338, 326.0856, 369.2697]\n",
      "water output= [896.996, 833.4337, 832.36597, 946.2459, 826.06287, 923.51447, 0, 113.599434, 0, 135.93253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288.68835, 0, 239.71342, 0, 0, 0, 0, 120.31043, 0, 0, 0, 0, 0, 89.958916, 0, 0, 0, 0, 0, 0, 0, 0, 81.37192, 0]\n",
      "solar output= 34.33\n",
      "wind output= 1315.64\n",
      "==============Day1 Hour9=================\n",
      "fire output= [338.3459, 159.15082, 0, 320.8112, 0, 478.8846, 228.4697, 175.57697, 431.5866, 299.84674]\n",
      "water output= [751.0114, 704.3384, 719.5414, 716.66833, 650.9541, 1460.7704, 0, 18.4316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239.57512, 0, 0, 0, 0, 0, 0, 222.62553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234.68915, 0, 0, 0, 0, 0, 0, 0, 122.36707, 0, 0]\n",
      "solar output= 1139.4\n",
      "wind output= 1079.35\n",
      "==============Day1 Hour10=================\n",
      "fire output= [432.59946, 72.65165, 202.92047, 0, 0, 427.2633, 0, 0, 171.30603, 174.02701]\n",
      "water output= [638.3412, 746.14386, 794.0661, 571.05914, 737.3709, 947.00275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129.19652, 0, 0, 0, 165.74709, 0, 0, 0, 377.49982, 0, 0, 0, 54.36361, 0, 0, 0, 0, 0, 306.08237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n",
      "solar output= 3089.3787\n",
      "wind output= 557.9944\n",
      "==============Day1 Hour11=================\n",
      "fire output= [325.64365, 181.86258, 574.4211, 0, 0, 283.93423, 534.1017, 288.69885, 197.11795, 325.56277]\n",
      "water output= [701.82886, 971.6966, 656.85645, 834.1954, 510.9238, 484.63354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 503.77945, 0, 0, 0, 0, 0, 13.376777, 0, 0, 0, 0, 0, 0, 0, 16.156116, 0, 22.39374, 0]\n",
      "solar output= 3159.099\n",
      "wind output= 0\n",
      "==============Day1 Hour12=================\n",
      "fire output= [348.2032, 125.81962, 520.65063, 0, 0, 214.41743, 573.42914, 287.19183, 184.07198, 263.57874]\n",
      "water output= [649.8334, 795.0025, 599.26764, 885.2508, 497.98376, 436.51004, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 415.74707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85.91445, 0]\n",
      "solar output= 3253.9683\n",
      "wind output= 0\n",
      "==============Day1 Hour13=================\n",
      "fire output= [300.67673, 242.97827, 418.6693, 20.4671, 0, 214.59871, 204.78912, 238.00845, 28.970802, 360.51254]\n",
      "water output= [674.7129, 760.7732, 773.1579, 791.159, 848.58704, 649.08356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282.34085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73.16816, 0, 0, 0, 583.8426, 0, 0, 0, 0, 0, 16.68703, 0, 0, 0, 0, 0, 0, 0, 170.5408, 0, 96.56359, 0]\n",
      "solar output= 2935.4287\n",
      "wind output= 0\n",
      "==============Day1 Hour14=================\n",
      "fire output= [288.96915, 200.79346, 385.9894, 0, 0, 172.74396, 346.25003, 213.70131, 81.324394, 280.25073]\n",
      "water output= [574.7254, 646.80365, 730.6316, 816.4154, 711.8115, 574.2843, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95.174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18.401548, 0, 0, 0, 512.2074, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132.09729, 0]\n",
      "solar output= 3053.7944\n",
      "wind output= 0\n",
      "==============Day1 Hour15=================\n",
      "fire output= [286.8732, 200.81985, 374.27567, 0, 0, 168.49951, 333.8264, 211.1147, 76.72871, 278.6276]\n",
      "water output= [563.7405, 633.5752, 730.2921, 807.2329, 718.4758, 573.32574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107.89926, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25.193022, 0, 0, 0, 509.04218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135.47325, 0]\n",
      "solar output= 3020.1228\n",
      "wind output= 0\n",
      "==============Day1 Hour16=================\n",
      "fire output= [317.46527, 285.11728, 367.92224, 262.4407, 0, 210.79071, 0, 188.76373, 0, 322.85443]\n",
      "water output= [800.863, 770.3766, 677.59204, 867.64374, 936.6714, 717.8453, 0, 0, 0, 41.178905, 0, 0, 0, 0, 0, 337.12146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46.26919, 0, 0, 0, 518.0217, 82.019936, 0, 0, 25.344755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330.07812, 0, 0, 0]\n",
      "solar output= 2663.4126\n",
      "wind output= 0\n",
      "==============Day1 Hour17=================\n",
      "fire output= [248.50781, 205.34534, 0, 126.094246, 0, 375.61148, 134.4363, 182.34761, 132.38104, 322.8924]\n",
      "water output= [735.4887, 627.36707, 719.22266, 1135.9901, 737.377, 1266.4459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331.40497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44.941242, 0, 0, 0, 0, 521.4235, 0, 0, 0, 0, 14.583631, 0, 89.21656, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n",
      "solar output= 1682.0482\n",
      "wind output= 0\n",
      "==============Day1 Hour18=================\n",
      "fire output= [317.80515, 226.44046, 0, 199.35297, 97.58156, 371.4872, 552.7898, 426.5318, 262.83597, 286.8999]\n",
      "water output= [725.2306, 787.8873, 818.5644, 835.8853, 955.31, 1045.1246, 51.227173, 0, 0, 8.6750555, 0, 70.37537, 0, 0, 0, 504.7552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278.6265, 0, 0, 0, 0, 0, 0, 232.83646, 0, 0, 0, 0, 0, 0, 0, 57.03139, 116.23301, 0, 132.11035, 298.2176, 285.77182, 432.73254, 0, 0]\n",
      "solar output= 204.19376\n",
      "wind output= 57.75\n",
      "==============Day1 Hour19=================\n",
      "fire output= [198.37643, 239.67769, 0, 247.72105, 238.42485, 388.53513, 511.16003, 366.209, 253.03984, 287.51593]\n",
      "water output= [778.19257, 760.2095, 842.6188, 738.9784, 865.10834, 1067.4534, 52.630955, 0, 0, 85.31131, 0, 81.30962, 54.67155, 0, 0, 454.8676, 0, 0, 18.542252, 0, 0, 0, 41.786102, 0, 0, 0, 269.25156, 0, 0, 0, 0, 0, 0, 86.522415, 0, 0, 0, 0, 0, 69.72938, 0, 132.79102, 49.410183, 0, 259.79425, 239.73602, 243.65161, 317.2059, 0, 0]\n",
      "solar output= 0\n",
      "wind output= 78.3\n",
      "==============Day1 Hour20=================\n",
      "fire output= [207.1172, 236.04623, 0, 241.74503, 223.49687, 384.94098, 499.78226, 368.03894, 255.8455, 284.6259]\n",
      "water output= [765.4401, 754.14056, 826.2944, 733.05756, 857.361, 1038.0017, 56.0675, 0, 0, 79.15065, 0, 80.98435, 49.36363, 0, 0, 449.64142, 0, 0, 18.0677, 0, 0, 0, 47.999603, 0, 0, 0, 273.73383, 0, 0, 0, 0, 0, 0, 93.00906, 0, 0, 0, 0, 0, 69.04088, 0, 116.89873, 45.895317, 0, 257.24048, 237.82565, 237.71588, 315.59268, 0, 0]\n",
      "solar output= 0\n",
      "wind output= 84.62\n",
      "==============Day1 Hour21=================\n",
      "fire output= [267.52158, 236.14876, 0, 230.96916, 165.97534, 396.85947, 482.00677, 405.7061, 289.52206, 292.1576]\n",
      "water output= [761.38513, 782.5247, 808.697, 760.48676, 885.24005, 972.071, 77.04248, 0, 0, 54.425137, 0, 85.744354, 26.54794, 0, 0, 458.47488, 0, 0, 16.971844, 0, 0, 0, 81.60605, 0, 0, 0, 316.86075, 0, 0, 0, 0, 0, 0, 133.08762, 0, 0, 0, 0, 0, 70.58469, 0, 47.10546, 32.52779, 0, 264.15427, 247.24947, 226.8465, 332.35297, 0, 0]\n",
      "solar output= 0\n",
      "wind output= 120.45\n",
      "==============Day1 Hour22=================\n",
      "fire output= [300.9183, 160.35394, 0, 251.58992, 0, 414.06943, 298.7779, 405.2857, 269.2597, 370.70898]\n",
      "water output= [847.083, 860.01337, 656.0189, 833.6485, 825.82007, 835.9072, 37.432884, 74.76214, 0, 8.4900055, 0, 37.73746, 0, 0, 0, 96.2788, 0, 0, 0, 0, 0, 114.398674, 0, 0, 0, 0, 426.84155, 0, 100.11326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242.25682, 0, 0, 0, 0, 168.15544, 251.93108, 25.711977, 227.76674, 0, 0]\n",
      "solar output= 0\n",
      "wind output= 246.08\n",
      "==============Day1 Hour23=================\n",
      "fire output= [304.47797, 151.23422, 0, 268.16907, 0, 408.08948, 273.23154, 389.77054, 282.50378, 415.30707]\n",
      "water output= [859.01044, 868.5331, 617.4658, 846.9624, 791.1709, 820.91406, 17.294533, 102.078896, 0, 15.948963, 0, 15.280015, 0, 0, 0, 8.692216, 0, 0, 0, 0, 0, 169.75793, 0, 0, 50.937458, 0, 417.7895, 0, 243.9174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291.09937, 0, 0, 0, 0, 178.20372, 247.55194, 0, 173.53511, 0, 0]\n",
      "solar output= 0\n",
      "wind output= 286.66\n"
     ]
    },
    {
     "data": {
      "image/png": "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6JaIlLtSB5guXbqQnZ3N22+/zdChQ5k2bRo9e/bEZrMRHx/PqFGjWLlyJV27dmX69OnExcUBMHDgQDp16sSYMWOIjIxk1qxZ3H333QDcfvvtjBgxgqFDh2K325k/fz6vvvpqaZvqMWV2c6vVaiwHfd11RrcvGMuhFz+krvipo4cPn5nttGCBcZ7NZox/n91T07Il+PpeXgPz8owu6YwMmu/6mYATRwk4eZSAE5lnvp44SsjxNOoc2Yu98AJP6w0MNNrz+zbz54akhTfneM1wzcISEZFS88g9MPPmzSMhIYHx48djtVpZs2YNAGFhYcycOZNevXoREBBAcHAwC37/wG3VqhVjxoyhXbt2+Pr6EhUVxcjfP7T79u3Lhx9+SFRUFAA9evRgwIABpW2qOYWHG0uhn70celqaEWTODjVHjhhTJLduhbfeMs6z240wVNz1fNVVkJFhbL+HFLctM/PMbAXg0Uto3mkff9LqNnfvVYm4hulPXucWVFI0XVlERDzoigKM0+l024+Pj2fv3r0kJiYSGxvrtuDciBEjiIuLY8eOHXTu3JmAgABX2dSpUxk8eDCpqal07drVdZ+LxWJh4cKFjB49mpMnT9K1a1fXVGzBuB8kPt7YwFigKjX1TKAp/pqebjyafvNmY9XNS2W1Qq1aHLIGcyKgFicCQsnxN76e9A/lhH8oWUF1OFT3ao6F1Ct56Ed/XiJuKsNjDkSqEo89C6lu3br07t27xLLIyMgSp2ADREdHu021PlvMuXfiS8ksljMrX/6++B9Op/HgtLMDTU6OsRjWuVutWu77wcFgtTJJvSYiIlJJ6WGOVZXFYjwgrUEDuO22im6NiHiQenNEFGAqXKVb7VZERMQEtLKRiIiImI4CjIiIiJiOhpCqkNIMR4GGpERExDwUYERExCNKc3Mx6AZjuTwaQhIRERHTUYARERER01GAEREREdNRgBERERHTUYARERER01GAEREREdPRNGqRamBlg29KWYOmt4pI5aIAIyIiUkVUp+fraQhJRERETEcBRkRERExHAUZERERMRwFGRERETEcBRkRERExHAUZERERMRwFGRERETEcBRkRERExHC9mJiIhUEdMzLRXdhHKjACNSSZVu+X8t/S8iVZuGkERERMR01AMjUklt2tzzyl/c13PtEBGpjNQDIyIiIqajACMiIiKmowAjIiIi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O3bsICIiAm9vb9794F1eeeMVPnjzA55//HnGTx6P0+mkccPG7P7ZPYic2wNT7Pvvv2fcuHH079+fAwcOEBUVVd6XdEkUYERERExsxYoVdO7cmf/85z88+/dn+XLJl9S9qi53xN8BwPcbv6dZZDPW/biOGXNncDD1IMB5PTDFOnbsyKpVqxgyZAhWq7XSDiPpJl4REZELeL1/EPYI94/KgrSCUtV5dn2lraugoIA33niDV199lZtuuomNX20kNCQUMIaJ1ixdQ2BAIId/O8wTU57g6PGjtG/TnqKiIu4fcj/TnjSmXD8z/RnXa06fPu2qf+3atYwdO5atW7eWqp1lQT0wIiIiJpWYmEiNGjXo2bMngCu8FAsMCATgtl63UT+iPk0aNaFTTCccDofrnE+Xf8rHX3xMZGQkjRo1Yu/evTRv3pzrrruOQYMGaRq1iIiIeFaHDh345ptv3NZzKYnVauWbj76hsLAQi8XCU4885SqLj4un/639XT1D6enpZdpmT1GAERERMbGQkJBLOq94SnVJx83InK0WERGRak0BRkRERExHAUZERERMRwFGRERETEcBRkREpJoqLCys6CZcMQUYERERk1u2bBl9+/Yl91QuSclJruM5J3Ko37o+AHl5eTidTldZ5tFMomKj+M+P/3EdW7VqFR07dnTtb9q0qRxaf2XKJMD88Y9/ZMGCBYCxil+LFi0ICwtjxowZbud99NFHNGrUiIiICN5//323stmzZ1OnTh2aNGnCqlWryqKZIiIiF+VVz47FgtvmVc9equ1idV2pFStW0KZNGxwOB30G9yEvL48npjzBjb1uJPNYJtE3RTNr3iyGPDjE9ZqHJz7MLd1u4dqrr+WlOS/hdDrx8/PD29ub1atX84c//IFhw4aRmprqiV+lx3k8wCxatIgVK1YAxmI48fHxJCQksH79ehYtWsTq1asBSE5OZvDgwUycOJEVK1YwadIkdu7cCRh/EI8++ij//Oc/ee+99xg+fDiZmZkX/JkiIiLVVU5ODosXL+aOO+4gJDiE6665jvUb1/Pso8+y8auN1Amrw4blG5i/aD7jHhgHwIuvvcjx7OO8NvU17HY7n634jClTpgBGr8uHH37IlClTSExMpF69ehV5eRfk0QBz9OhRxo0bR/PmzQEjzERERDBx4kSioqKYNGkS8+fPB2DevHl069aN4cOH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GDhwIEuWLOGnn37ixIkTzJo1y1UmIiIi4pEhpK+++oqUlBRSUlJ48803Xcf37dvHvHnzSEhIYPz48VitVtasWQNAWFgYM2fOpFevXgQEBBAcHOxaI6ZVq1aMGTOGdu3a4evrS1RUFCNHjvREU0VERKQK8EiA6devn9sKu2dr3Lgxe/fuJTExkdjYWGrVquUqGzFiBHFxcezYsYPOnTsTEBDgKps6dSqDBw8mNTWVrl27XvQeGBEREaleyuVhjnXr1qV3794llkVGRrpNmT5bdHS0634aERERkWJ6mKOIiIiYTrn0wIiISNWn1YulPKkHRkRERExHAUZERERMRwFGRERETEcBRkRERExHAUZERERMRwFGRERETEcBRkRERExH68CIyGXRWh8iUhmoB0ZERERMRwFGRERETEcBRkRERExHAUZERERMRwFGRERETEcBRkRERExHAUZERERMRwFGRERETEcBRkRERExHAUZERERMRwFGRERETEcBRkRERExHAUZERERMRwFGRERETEcBRkRERExHAUZERERMRwFGRERETEcBRkRERExHAUZERERMRwFGRERETEcBRkRERExHAUZERERMRwFGRERETEcBRkRERExHAUZERERMRwFGRERETEcBRkRERExHAUZERERMRwFGRERETEcBRkRERExHAUZERERMRwFGRERETEcBRkRERExHAUZERERMRwFGRERETEcBRkRERExHAUZERERMRwFGRERETEcBRkRERExHAUZERERMRwFGRERETEcBRkRERExHAUZERERMRwFGRERETEcBRkRERExHAUZERERMp1IHmOTkZGJiYggJCWH8+PE4nc6KbpKIiIhUApU2wDgcDvr27Uvbtm3ZuHEjKSkpLFiwoKKbJSIiIpVApQ0wy5cvJysrixkzZtC0aVOmTZvG/PnzK7pZIiIiUgnYK7oBF7JlyxZiY2Px8/MDoGXLlqSkpJR4rsPhwOFwuPazsrIAyM7OLpO2ncgtuuLXntumylKXp+urrHWdW59+Z5dfn35n5V9fdajL0/VV1rrOra8y/84qQnEbLuWWEYuzkt5YMm7cOE6fPs3s2bNdx2rXrs2uXbsICQlxO/fZZ5/lueeeK+8mioiISBk4ePAg9evXv+g5lbYHxm634+Pj43bM19eX3Nzc8wLMhAkTGDt2rGu/qKiIo0ePUqtWLSwWS7m0F4zk2KBBAw4ePEhQUFC5/Vw5Q38GFUu//4qnP4OKpd9/6TidTnJycoiIiPif51baABMaGkpycrLbsZycHLy9vc8718fH57ywExwcXJbNu6igoCD9xa1g+jOoWPr9Vzz9GVQs/f6vXM2aNS/pvEp7E29MTAzr16937e/btw+Hw0FoaGgFtkpEREQqg0obYLp06UJ2djZvv/02ANOmTaNnz57YbLYKbpmIiIhUtEo7hGS325k3bx4JCQmMHz8eq9XKmjVrKrpZF+Xj48Mzzzxz3nCWlB/9GVQs/f4rnv4MKpZ+/+Wn0s5CKnb48GESExOJjY2lVq1aFd0cERERqQQqfYAREREROVelvQdGRERE5EIUYERERMR0FGCkyhg9ejQWi8W1NWvWrKKbJFLmMjIyiIyMZP/+/a5jei9IdaAA4yHJycnExMQQEhLC+PHjL+k5DuJZGzdu5F//+hfHjh3j2LFjJCUlVXSTqrySPjz1Xig/GRkZ9OnTx+33D3ovlJdly5bRpEkT7HY7rVu3Zvv27YDeA+VFAcYDHA4Hffv2pW3btmzcuJGUlBQWLFhQ0c2qVgoKCti2bRtdunQhODiY4OBgAgMDK7pZVVpJH556L5Svu+66i0GDBrkd03uhfOzdu5ehQ4fyt7/9jdTUVK6++mqGDx+u90B5ckqpLV261BkSEuI8efKk0+l0Ojdv3uzs1KlTBbeqetm0aZMzICDA2bRpU6evr68zLi7OeeDAgYpuVpXWo0cP56uvvuoEnPv27XM6nXovlLeff/7Z6XQ63f4M9F4oH59//rnzjTfecO2vWrXKWaNGDb0HypF6YDxgy5YtxMbG4ufnB0DLli1JSUmp4FZVLykpKTRv3pyFCxeydetW7HY79913X0U3q0p78803GT16tNsxvRfKV2Rk5HnH9F4oH3369HH7ve7cuZOoqCi9B8pRpV2J10yys7Pd/iGxWCzYbDaOHTt23pOzpWwMHjyYwYMHu/bnzJlDZGQk2dnZeqBaGSnpw1PvhYqn90L5y8vL4+WXX2bs2LHs2bNH74Fyoh4YD7Db7ectG+3r60tubm4FtUiuuuoqioqKOHToUEU3pVrRe6Hy0Xuh7D3zzDP4+/szfPhwvQfKkQKMB4SGhpKenu52LCcnB29v7wpqUfUzfvx4Fi9e7Npfv349VquVBg0aVGCrqh+9Fyqe3gvla9WqVcyePZvFixfj5eWl90A50hCSB8TExPDmm2+69vft24fD4SA0NLQCW1W9tGrViqeffpo6depQWFjIQw89xJAhQ1zj0FI+9F6oeHovlJ99+/aRkJDA7NmziY6OBvQeKFcVfRdxVZCfn++sXbu286233nI6nU7n8OHDnX369KngVlU/TzzxhLNmzZrO0NBQ5+jRo50nTpyo6CZVC5w1A0bvhYpx9p+B06n3QnnIzc11RkdHO++9915nTk6Oa8vLy9N7oJzoYY4e8tlnn5GQkECNGjWwWq2sWbPGlchFqjKLxcK+ffto3LgxoPeCVA/Lli2jf//+5x3ft28fW7du1XugHCjAeNDhw4dJTEwkNjaWWrVqVXRzRCqM3gtS3ek9UPYUYERERMR0NAtJRERETEcBRkRERExHAUZERERMRwFGRERETEcBRkRERExHAUZERERMRwFGRERETEcBRkRERExHAUZERERM5/8BYODdldXdz+kAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "requirement = trainData.Payload[:trainDuration, 2]\n",
    "# 实际的风光电数据\n",
    "windPower = trainData.NewPower[:trainDuration, 3]\n",
    "sunPower = trainData.NewPower[:trainDuration, 5]\n",
    "fireInfo = trainData.FireElectric[:fireStationNum, 4:9]\n",
    "storageInfo = trainData.StoragePower[:2, :]\n",
    "savingStorage = Storage(storageInfo[0])\n",
    "batteryStorage = Storage(storageInfo[1])\n",
    "fireLimit = []\n",
    "for i in range(fireStationNum):\n",
    "    fireLimit.append([\n",
    "        fireInfo[i][0] * fireInfo[i][1],\n",
    "        fireInfo[i][0] * fireInfo[i][2],\n",
    "        fireInfo[i][0] * fireInfo[i][3],\n",
    "        fireInfo[i][0] * fireInfo[i][4],\n",
    "    ])\n",
    "waterInfoP = trainData.WaterElectric[:50, 3]\n",
    "waterInfoG = trainData.WaterElectric[:50, 7]\n",
    "waterGraph = trainData.WaterPowerGraph\n",
    "waterLimit = []\n",
    "for i in range(len(waterInfoP)):\n",
    "    graph_id = waterInfoG[i]\n",
    "    for j in waterGraph:\n",
    "        if j[0] == graph_id:\n",
    "            station_limit = []\n",
    "            for m in range(12):\n",
    "                for d in range(days[m]):\n",
    "                    for h in range(24):\n",
    "                        station_limit.append(waterInfoP[i] * j[m + 1])\n",
    "            waterLimit.append(station_limit)\n",
    "            break\n",
    "\n",
    "station_info = {\n",
    "    \"water-station-num\": 50,\n",
    "    \"fire-station-num\": fireStationNum\n",
    "}\n",
    "temp = [[waterLimit[i][j]\n",
    "            for j in range(trainDuration)] for i in range(len(waterLimit))]\n",
    "# handler = Solver(requirement, fireLimit, [], fireInfo, sunPower, windPower)\n",
    "# handler.solve()\n",
    "env = PowerDayAheadSchedule(\n",
    "    d=trainDuration,\n",
    "    require_=requirement,\n",
    "    fireP=fireLimit,\n",
    "    fireExtra=trainData.FireElectric[:fireStationNum, 18],\n",
    "    windP=windPower,\n",
    "    sunP=sunPower,\n",
    "    waterP=temp,\n",
    "    saving=savingStorage,\n",
    "    battery=batteryStorage,\n",
    "    **station_info\n",
    ")\n",
    "if os.path.exists(MODEL_PATH):\n",
    "    # agent = tool.LoadDDPGModel(env, MODEL_PATH)\n",
    "    agent = tool.LoadSACV2Model(env, MODEL_PATH)\n",
    "else:\n",
    "    agent, _ = Trainer(env)\n",
    "new_energy = tool.ShowPolicy(env, agent);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "new energy consumption rate=50.08%\n"
     ]
    }
   ],
   "source": [
    "# add some critic standard\n",
    "# 新能源消纳率\n",
    "predict_new_energy = sunPower.sum() + windPower.sum()\n",
    "new_energy_consumption_rate = 100.0 * float(new_energy) / float(predict_new_energy)\n",
    "print(\"new energy consumption rate=%.2f%%\"%(new_energy_consumption_rate))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "pytorch",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
